--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / js / VisualiserWasmLoader.js
Displaying Raw • Download
meshchatx/src/frontend/js/VisualiserWasmLoader.js 9f71f3420c18d5800afb493b723c328d23c7ea12 (9f71f342) Text, 7.16 KB
T8b949e/**
* Lazy-load visualiser-wasm (Go) for network visualiser hot paths.
* Falls back silently when WebAssembly is unavailable or load fails.
* Artifacts live under /vendor/visualiser-wasm/ (built via task build:visualiser-wasm).
*/
Tff7b72let Te6edf3resolvedPromise Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72let Te6edf3integrityHashes Tff7b72= Tff7b72nullTb4b4b4;
T8b949e/** Computes SHA-384 hash of ArrayBuffer for SRI verification. */
Tff7b72async Tff7b72function Te6edf3computeSriHashTb4b4b4(Te6edf3bufTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3hash Tff7b72= Tff7b72await Te6edf3cryptoTb4b4b4.Te6edf3subtleTb4b4b4.Te6edf3digestTb4b4b4(Ta5d6ff"SHA-384"Tb4b4b4, Te6edf3bufTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3base64 Tff7b72= Te6edf3btoaTb4b4b4(Tffa657StringTb4b4b4.Te6edf3fromCharCodeTb4b4b4(Tb4b4b4...Tff7b72new Tffa657Uint8ArrayTb4b4b4(Te6edf3hashTb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72return Ta5d6ff`Ta5d6ffsha384-Tffd700${Te6edf3base64Tffd700}Ta5d6ff`Tb4b4b4;
Tb4b4b4}
T8b949e/** True when WASM artifacts were present at Vite build time. */
Tff7b72export Tff7b72function Te6edf3isVisualiserWasmBundledTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(
Tff7b72typeof Tffa657globalThis Tff7b72!== Ta5d6ff"undefined" Tff7b72&&
Tff7b72typeof Tffa657globalThisTb4b4b4.Te6edf3__MESHCHATX_TEST_VISUALISER_WASM_BUNDLED__ Tff7b72=== Ta5d6ff"boolean"
Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657globalThisTb4b4b4.Te6edf3__MESHCHATX_TEST_VISUALISER_WASM_BUNDLED__Tb4b4b4;
Tb4b4b4}
Tff7b72return Tff7b72importTb4b4b4.Te6edf3metaTb4b4b4.Te6edf3envTb4b4b4.Te6edf3VITE_VISUALISER_WASM_BUNDLED Tff7b72=== Ta5d6ff"true"Tb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3baseUrlTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3root Tff7b72= Tff7b72importTb4b4b4.Te6edf3metaTb4b4b4.Te6edf3envTb4b4b4.Te6edf3BASE_URL Tff7b72|| Ta5d6ff"/"Tb4b4b4;
Tff7b72return Ta5d6ff`Tffd700${Te6edf3rootTb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/\/?$/Tb4b4b4, Ta5d6ff"/"Tb4b4b4)Tffd700}Ta5d6ffvendor/visualiser-wasmTa5d6ff`Tb4b4b4;
Tb4b4b4}
Tff7b72async Tff7b72function Te6edf3getIntegrityHashesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3integrityHashes Tff7b72!== Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3integrityHashesTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3embeddedWasm Tff7b72= Tff7b72typeof Te6edf3__VISUALISER_WASM_SRI_WASM__ Tff7b72!== Ta5d6ff"undefined" Tff7b72? Te6edf3__VISUALISER_WASM_SRI_WASM__ Tff7b72: Ta5d6ff""Tb4b4b4;
Tff7b72const Te6edf3embeddedExec Tff7b72= Tff7b72typeof Te6edf3__VISUALISER_WASM_SRI_EXEC__ Tff7b72!== Ta5d6ff"undefined" Tff7b72? Te6edf3__VISUALISER_WASM_SRI_EXEC__ Tff7b72: Ta5d6ff""Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3embeddedWasm Tff7b72&& Te6edf3embeddedExecTb4b4b4) Tb4b4b4{
Te6edf3integrityHashes Tff7b72= Tb4b4b4{ Te6edf3wasmTff7b72: Te6edf3embeddedWasmTb4b4b4, Te6edf3wasmExecTff7b72: Te6edf3embeddedExec Tb4b4b4}Tb4b4b4;
Tff7b72return Te6edf3integrityHashesTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3res Tff7b72= Tff7b72await Te6edf3fetchTb4b4b4(Ta5d6ff`Tffd700${Te6edf3baseUrlTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff/integrity.jsonTa5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3resTb4b4b4.Te6edf3okTb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Te6edf3integrityHashes Tff7b72= Tff7b72await Te6edf3resTb4b4b4.Te6edf3jsonTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3integrityHashesTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72async Tff7b72function Te6edf3verifySriTb4b4b4(Te6edf3bufTb4b4b4, Te6edf3expectedHashTb4b4b4, Te6edf3nameTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3expectedHashTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffVisualiser WASM: SRI hash missing for Tffd700${Te6edf3nameTffd700}Ta5d6ff. Refusing to load untrusted code.Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3actualHash Tff7b72= Tff7b72await Te6edf3computeSriHashTb4b4b4(Te6edf3bufTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3actualHash Tff7b72!== Te6edf3expectedHashTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(
Ta5d6ff`Ta5d6ffVisualiser WASM: SRI hash mismatch for Tffd700${Te6edf3nameTffd700}Ta5d6ff. Possible tampering detected. Refusing to execute.Ta5d6ff`
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72async Tff7b72function Te6edf3injectScriptTb4b4b4(Te6edf3srcTb4b4b4, Te6edf3expectedHashTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3id Tff7b72= Ta5d6ff"meshchatx-visualiser-wasm-exec"Tb4b4b4;
Tff7b72if Tb4b4b4(Tffa657documentTb4b4b4.Te6edf3getElementByIdTb4b4b4(Te6edf3idTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3res Tff7b72= Tff7b72await Te6edf3fetchTb4b4b4(Te6edf3srcTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3resTb4b4b4.Te6edf3okTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffVisualiser WASM: failed to fetch script Tffd700${Te6edf3srcTffd700}Ta5d6ff (Tffd700${Te6edf3resTb4b4b4.Te6edf3statusTffd700}Ta5d6ff)Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3buf Tff7b72= Tff7b72await Te6edf3resTb4b4b4.Te6edf3arrayBufferTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3verifySriTb4b4b4(Te6edf3bufTb4b4b4, Te6edf3expectedHashTb4b4b4, Ta5d6ff"wasm_exec.js"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3blob Tff7b72= Tff7b72new Te6edf3BlobTb4b4b4(Tb4b4b4[Te6edf3bufTb4b4b4]Tb4b4b4, Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"application/javascript" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3blobUrl Tff7b72= Te6edf3URLTb4b4b4.Te6edf3createObjectURLTb4b4b4(Te6edf3blobTb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3resolveTb4b4b4, Te6edf3rejectTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3s Tff7b72= Tffa657documentTb4b4b4.Te6edf3createElementTb4b4b4(Ta5d6ff"script"Tb4b4b4)Tb4b4b4;
Te6edf3sTb4b4b4.Te6edf3id Tff7b72= Te6edf3idTb4b4b4;
Te6edf3sTb4b4b4.Tff7b72async Tff7b72= Tff7b72trueTb4b4b4;
Te6edf3sTb4b4b4.Te6edf3src Tff7b72= Te6edf3blobUrlTb4b4b4;
Te6edf3sTb4b4b4.Te6edf3onload Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3URLTb4b4b4.Te6edf3revokeObjectURLTb4b4b4(Te6edf3blobUrlTb4b4b4)Tb4b4b4;
Te6edf3resolveTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Te6edf3sTb4b4b4.Te6edf3onerror Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3URLTb4b4b4.Te6edf3revokeObjectURLTb4b4b4(Te6edf3blobUrlTb4b4b4)Tb4b4b4;
Te6edf3rejectTb4b4b4(Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffVisualiser WASM: failed to load script Tffd700${Te6edf3srcTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Tffa657documentTb4b4b4.Te6edf3headTb4b4b4.Te6edf3appendChildTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72async Tff7b72function Te6edf3instantiateWasmBufferTb4b4b4(Te6edf3bufTb4b4b4, Te6edf3goTb4b4b4) Tb4b4b4{
Tff7b72let Te6edf3resultTb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3result Tff7b72= Tff7b72await Te6edf3WebAssemblyTb4b4b4.Te6edf3instantiateStreamingTb4b4b4(
Tff7b72new Te6edf3ResponseTb4b4b4(Te6edf3bufTb4b4b4, Tb4b4b4{ Te6edf3headersTff7b72: Tb4b4b4{ Ta5d6ff"content-type"Tff7b72: Ta5d6ff"application/wasm" Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3goTb4b4b4.Te6edf3importObject
Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3result Tff7b72= Tff7b72await Te6edf3WebAssemblyTb4b4b4.Te6edf3instantiateTb4b4b4(Te6edf3bufTb4b4b4, Te6edf3goTb4b4b4.Te6edf3importObjectTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3goTb4b4b4.Te6edf3runTb4b4b4(Te6edf3resultTb4b4b4.Te6edf3instanceTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3isReadyTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4(
Tff7b72typeof Tffa657globalThisTb4b4b4.Te6edf3meshchatxVisualiserBuildPathGraph Tff7b72=== Ta5d6ff"function" Tff7b72&&
Tff7b72typeof Tffa657globalThisTb4b4b4.Te6edf3meshchatxVisualiserBuildFullGraph Tff7b72=== Ta5d6ff"function" Tff7b72&&
Tff7b72typeof Tffa657globalThisTb4b4b4.Te6edf3meshchatxVisualiserLayout Tff7b72=== Ta5d6ff"function" Tff7b72&&
Tff7b72typeof Tffa657globalThisTb4b4b4.Te6edf3meshchatxVisualiserPathHashes Tff7b72=== Ta5d6ff"function" Tff7b72&&
Tff7b72typeof Tffa657globalThisTb4b4b4.Te6edf3meshchatxVisualiserDedupeIcons Tff7b72=== Ta5d6ff"function"
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/** True when WASM scene exports for the WebGL renderer are registered. */
Tff7b72export Tff7b72function Te6edf3isVisualiserWebGLSceneReadyTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4(
Te6edf3isReadyTb4b4b4(Tb4b4b4) Tff7b72&&
Tff7b72typeof Tffa657globalThisTb4b4b4.Te6edf3meshchatxVisualiserSceneSet Tff7b72=== Ta5d6ff"function" Tff7b72&&
Tff7b72typeof Tffa657globalThisTb4b4b4.Te6edf3meshchatxVisualiserSceneGetDrawBuffers Tff7b72=== Ta5d6ff"function" Tff7b72&&
Tff7b72typeof Tffa657globalThisTb4b4b4.Te6edf3meshchatxVisualiserSceneTick Tff7b72=== Ta5d6ff"function" Tff7b72&&
Tff7b72typeof Tffa657globalThisTb4b4b4.Te6edf3meshchatxVisualiserScenePick Tff7b72=== Ta5d6ff"function"
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72async Tff7b72function Te6edf3instantiateOnceTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3WebAssembly Tff7b72=== Ta5d6ff"undefined"Tb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Visualiser WASM: WebAssembly is not available"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3root Tff7b72= Te6edf3baseUrlTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3integrity Tff7b72= Tff7b72await Te6edf3getIntegrityHashesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3integrityTff7b72?Tb4b4b4.Te6edf3wasmExecTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Visualiser WASM: wasm_exec SRI missing (build without WASM vendor files?)"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72typeof Tffa657globalThisTb4b4b4.Te6edf3Go Tff7b72=== Ta5d6ff"undefined"Tb4b4b4) Tb4b4b4{
Tff7b72await Te6edf3injectScriptTb4b4b4(Ta5d6ff`Tffd700${Te6edf3rootTffd700}Ta5d6ff/wasm_exec.jsTa5d6ff`Tb4b4b4, Te6edf3integrityTb4b4b4.Te6edf3wasmExecTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72typeof Tffa657globalThisTb4b4b4.Te6edf3Go Tff7b72=== Ta5d6ff"undefined"Tb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Visualiser WASM: Go runtime missing after wasm_exec.js load"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3go Tff7b72= Tff7b72new Tffa657globalThisTb4b4b4.Te6edf3GoTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3wasmUrl Tff7b72= Ta5d6ff`Tffd700${Te6edf3rootTffd700}Ta5d6ff/visualiser.wasmTa5d6ff`Tb4b4b4;
Tff7b72const Te6edf3res Tff7b72= Tff7b72await Te6edf3fetchTb4b4b4(Te6edf3wasmUrlTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3resTb4b4b4.Te6edf3okTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffVisualiser WASM: fetch failed (Tffd700${Te6edf3resTb4b4b4.Te6edf3statusTffd700}Ta5d6ff)Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3buf Tff7b72= Tff7b72await Te6edf3resTb4b4b4.Te6edf3arrayBufferTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3verifySriTb4b4b4(Te6edf3bufTb4b4b4, Te6edf3integrityTff7b72?Tb4b4b4.Te6edf3wasmTb4b4b4, Ta5d6ff"visualiser.wasm"Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3instantiateWasmBufferTb4b4b4(Te6edf3bufTb4b4b4, Te6edf3goTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3isReadyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Visualiser WASM: exports were not registered"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
T8b949e/**
* Ensures visualiser WASM is initialized.
* Resolves true when exports are callable, false when unavailable or failed.
*/
Tff7b72export Tff7b72function Te6edf3preloadVisualiserWasmTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3isVisualiserWasmBundledTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3isReadyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3resolvedPromise Tff7b72=== Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3resolvedPromise Tff7b72= Tb4b4b4(Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Te6edf3instantiateOnceTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3isReadyTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3warnTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3resolvedPromise Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3resolvedPromiseTb4b4b4;
Tb4b4b4}
Tff7b72export Tff7b72function Te6edf3isVisualiserWasmReadyTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3isReadyTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* Call a WASM JSON export and parse the result string.
* Returns null on any failure so callers can fall back to JS.
*/
Tff7b72export Tff7b72function Te6edf3callVisualiserWasmJsonTb4b4b4(Te6edf3fnNameTb4b4b4, Tb4b4b4...Te6edf3argsTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3fn Tff7b72= Tffa657globalThisTb4b4b4[Te6edf3fnNameTb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3fn Tff7b72!== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3raw Tff7b72= Te6edf3fnTb4b4b4(Tb4b4b4...Te6edf3argsTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3raw Tff7b72== Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3raw Tff7b72=== Ta5d6ff"object" Tff7b72&& Te6edf3rawTb4b4b4.Te6edf3ok Tff7b72=== Tff7b72falseTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3warnTb4b4b4(Ta5d6ff"Visualiser WASM error:"Tb4b4b4, Te6edf3rawTb4b4b4.Te6edf3errorTb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3raw Tff7b72!== Ta5d6ff"string"Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72return Tffa657JSONTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3warnTb4b4b4(Ta5d6ff"Visualiser WASM call failed:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────